package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.PetCategory;

/**
 * 宠物分类Service接口
 * 
 * @author ruoyi
 * @date 2025-08-30
 */
public interface IPetCategoryService 
{
    /**
     * 查询宠物分类
     * 
     * @param categoryId 宠物分类主键
     * @return 宠物分类
     */
    public PetCategory selectPetCategoryByCategoryId(Long categoryId);

    /**
     * 查询宠物分类列表
     * 
     * @param petCategory 宠物分类
     * @return 宠物分类集合
     */
    public List<PetCategory> selectPetCategoryList(PetCategory petCategory);

    /**
     * 查询所有有效的宠物分类
     * 
     * @return 宠物分类集合
     */
    public List<PetCategory> selectActivePetCategories();

    /**
     * 新增宠物分类
     * 
     * @param petCategory 宠物分类
     * @return 结果
     */
    public int insertPetCategory(PetCategory petCategory);

    /**
     * 修改宠物分类
     * 
     * @param petCategory 宠物分类
     * @return 结果
     */
    public int updatePetCategory(PetCategory petCategory);

    /**
     * 批量删除宠物分类
     * 
     * @param categoryIds 需要删除的宠物分类主键集合
     * @return 结果
     */
    public int deletePetCategoryByCategoryIds(Long[] categoryIds);

    /**
     * 删除宠物分类信息
     * 
     * @param categoryId 宠物分类主键
     * @return 结果
     */
    public int deletePetCategoryByCategoryId(Long categoryId);

    /**
     * 校验分类编码是否唯一
     * 
     * @param petCategory 宠物分类信息
     * @return 结果
     */
    public boolean checkCategoryCodeUnique(PetCategory petCategory);

    /**
     * 构建树形结构的分类列表
     * 
     * @param categories 分类集合
     * @return 树形结构集合
     */
    public List<PetCategory> buildCategoryTree(List<PetCategory> categories);

    /**
     * 查询顶级分类列表
     * 
     * @return 顶级分类集合
     */
    public List<PetCategory> selectTopLevelCategories();

    /**
     * 根据父级ID查询子分类
     * 
     * @param parentId 父级ID
     * @return 子分类集合
     */
    public List<PetCategory> selectCategoriesByParentId(Long parentId);

    /**
     * 查询所有有效的子分类
     * 
     * @return 子分类集合
     */
    public List<PetCategory> selectActiveSubCategories();

    /**
     * 获取分类及其对应的子分类名称映射
     * 
     * @return 分类名称映射
     */
    public java.util.Map<String, List<String>> listCategoriesWithNames();
}